package com.librelato.persistencia;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.librelato.bean.CentroCustoBean;
import com.librelato.bean.CompradorBean;
import com.librelato.bean.CondicaoPagamentoBean;
import com.librelato.bean.EmpresaBean;
import com.librelato.bean.FornecedorBean;
import com.librelato.bean.HistoricoBean;
import com.librelato.bean.PedidoBean;
import com.librelato.bean.ProdutoBean;
import com.librelato.bean.SolicitacaoBean;
import com.librelato.bean.TransportadoraBean;
import com.librelato.bean.UnidadeRequisicaoBean;
import com.librelato.bean.UsuarioBean;
import com.librelato.persistencia.config.SQLConfiguracao;
import com.librelato.persistencia.enums.EnumCondicao;
import com.librelato.persistencia.interfaces.ISolicitacaoDao;
import com.librelato.util.Ferramentas;

public class SolicitacaoDao<P extends SolicitacaoBean> extends DaoGenerico<P>
		implements ISolicitacaoDao<P> {

	public SolicitacaoDao() {
		df = new SimpleDateFormat("yyyyMMdd");
		df2 = new SimpleDateFormat("dd/MM/yy");
	}

	@Override
	public void grava(SolicitacaoBean solicitacao) throws Exception {
		conn = null;
		ps = null;
		rs = null;
		query = null;

		try {
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance()
					.getValor("insert_solicitacao");
			ps = conn.prepareStatement(query);

			for (int i = 0; i < solicitacao.getItensSolicitacao().size(); i++) {

				ps.setString(1, "01");
				ps.setString(2, i + 1 + "");
				ps.setString(3, i + 1 + "");
				ps.setString(4, solicitacao.getItensSolicitacao().get(i)
						.getCodigo());
				ps.setString(5, solicitacao.getItensSolicitacao().get(i)
						.getUnidMedida());
				ps.setDouble(6, solicitacao.getItensSolicitacao().get(i)
						.getQuantidade());
				ps.setString(7, solicitacao.getItensSolicitacao().get(i)
						.getLocal());
				ps.setString(8, solicitacao.getItensSolicitacao().get(i)
						.getObservacao());
				ps.setString(9, solicitacao.getItensSolicitacao().get(i)
						.getOrdemProd());
				ps.setString(10, solicitacao.getItensSolicitacao().get(i)
						.getCentroCusto().getCodigo());
				ps.setString(11,
						df.format(solicitacao.getDataEmissao().getTime()));
				ps.setString(12, solicitacao.getUsuario().getCodigo());
				ps.setInt(13, i + 1);
				ps.executeUpdate();
				conn.commit();
			}

		} catch (Exception e) {
			e.printStackTrace();
			throw e;

		} finally {
			super.fecharRecursos(ps, rs);
		}

	}

	public List<HistoricoBean> buscaHistoricos(SolicitacaoBean solicitacao)
			throws Exception {
		List<HistoricoBean> historicos = new ArrayList<HistoricoBean>();
		HistoricoBean historico;
		ResultSet rsAux = null;
		PreparedStatement psAux = null;
		try {
			query = SQLConfiguracao.getInstance().getValor(
					"localiza_historico_solicitacao");
			conn = GerenciadorConexao.getConexao();
			psAux = conn.prepareStatement(query);
			psAux.setString(1, solicitacao.getFilial());
			psAux.setString(2, solicitacao.getNumSolicitacao());
			psAux.setString(3, solicitacao.getItem());
			rsAux = psAux.executeQuery();
			while (rsAux.next()) {
				historico = new HistoricoBean();
				historico.setDataEmissao(rsAux.getTimestamp("DATA"));
				historico.setDescricao(rsAux.getString("DESCRICAO"));
				if (rsAux.getString("OBSERVACAO") != null) {
					historico.setObservacao(rsAux.getString("OBSERVACAO"));
				} else {
					historico.setObservacao("");
				}
				historicos.add(historico);
			}
		} catch (Exception e) {
			throw e;
		} finally {
			rsAux.close();
			psAux.close();
		}
		return historicos;
	}

	@Override
	public List<SolicitacaoBean> buscaSolicitacoes(String dataDe,
			String dataAte, String numSolicita, String codProduto,
			String status, String filial, Integer idUser, boolean filtro)
			throws Exception {
		conn = null;
		ps = null;
		rs = null;
		query = null;
		List<SolicitacaoBean> listaSolicitacoes = new ArrayList<SolicitacaoBean>();
		List<ProdutoBean> listaProdutos;
		SolicitacaoBean solicitacao;
		PedidoBean pedido;
		ProdutoBean produto;
		CentroCustoBean centroCusto;
		UnidadeRequisicaoBean unidadeRequisicao;
		CompradorBean comprador;
		FornecedorBean fornecedor;
		try {
			query = SQLConfiguracao.getInstance().getValor(
					"localiza_solicitacoes");
			conn = GerenciadorConexao.getConexao();
			if (filtro) {
				if (dataDe != null && !"".equals(dataDe.trim())) {
					query += " AND C1_EMISSAO >= '"
							+ df.format(df2.parse(dataDe)) + "'";
				}
				if (dataAte != null && !"".equals(dataAte.trim())) {
					query += " AND C1_EMISSAO <= '"
							+ df.format(df2.parse(dataAte)) + "'";
				}
				if (numSolicita != null && !"".equals(numSolicita.trim())) {
					query += " AND C1_NUM = '" + numSolicita + "'";
				}
				if (codProduto != null && !"".equals(codProduto.trim())) {
					query += " AND C1_PRODUTO = '" + codProduto + "'";
				}
				if (status != null && !"".equals(status.trim())
						&& !status.equals("Todos")) {
					query += " AND C1_STATUS = '" + status + "'";
				}
				if (filial != null && !"".equals(filial.trim())
						&& !filial.trim().equals("0")) {
					query += " AND C1_FILIAL = '" + filial + "'";
				}
				query += " ORDER BY C1_NUM,C1_PRODUTO";
				ps = conn.prepareStatement(query);
				ps.setInt(1, idUser);
				rs = ps.executeQuery();
				while (rs.next()) {
					solicitacao = new SolicitacaoBean();
					produto = new ProdutoBean();
					centroCusto = new CentroCustoBean();
					unidadeRequisicao = new UnidadeRequisicaoBean();
					listaProdutos = new ArrayList<ProdutoBean>();
					centroCusto.setCodigo(rs.getString("C1_CC").trim());
					unidadeRequisicao.setCodigo(rs.getString("C1_UNIDREQ"));
					produto.setCentroCusto(centroCusto);
					produto.setCodigo(rs.getString("C1_PRODUTO"));
					produto.setDescricao(rs.getString("C1_DESCRI").trim());
					produto.setUnidMedida(rs.getString("C1_UM"));
					produto.setOrdemProd(rs.getString("C1_NUMOP").trim());
					produto.setObservacao(rs.getString("C1_OBS").trim());
					produto.setQuantidade(rs.getDouble("C1_QUANT"));
					produto.setLocal(rs.getString("C1_LOCAL"));
					produto.setItemPosicao(rs.getString("C1_ITEMPED"));
					produto.setNecessidade(df.parse(rs.getString("C1_DATPRF")));
					produto.setQtdeAtendida(rs.getDouble("C1_QUJE"));
					produto.setFilial(rs.getString("C1_FILIAL"));
					listaProdutos.add(produto);
					solicitacao.setItensSolicitacao(listaProdutos);
					solicitacao.setDataEmissao(df.parse(rs
							.getString("C1_EMISSAO")));
					solicitacao.setHoraSolicitacao(rs.getString("C1_HORASOL"));
					solicitacao.setUnidadeRequisi(unidadeRequisicao);
					solicitacao.setFilial(rs.getString("C1_FILIAL"));
					solicitacao.setNumSolicitacao(rs.getString("C1_NUM"));
					solicitacao.setStatus(rs.getString("C1_STATUS"));
					solicitacao.setItem(rs.getString("C1_ITEM"));

					if (!"".equals(rs.getString("C1_DTAPROV").trim())) {
						solicitacao.setDataAprovacao(df.parse(rs
								.getString("C1_DTAPROV")));
					}
					if (!"".equals(rs.getString("C1_PEDIDO").trim())) {
						solicitacao = buscaDadosPedido(solicitacao);
					}
					/*
					 * comprador = new CompradorBean();
					 * comprador.setCodigo(rs.getString("C1_CODCOMP"));
					 * comprador.setNome(rs.getString("Y1_NOME")); pedido = new
					 * PedidoBean();
					 * pedido.setNumeroPedido(rs.getString("C1_PEDIDO"));
					 * fornecedor = new FornecedorBean();
					 * fornecedor.setCodigo(rs.getString("C1_FORNECE"));
					 * fornecedor.setLoja(rs.getString("C1_LOJA"));
					 * fornecedor.setNome(super.buscaNomeFornecedor(
					 * fornecedor.getCodigo(), fornecedor.getLoja()));
					 * pedido.setFornecedor(fornecedor);
					 * pedido.setComprador(comprador);
					 * 
					 * query = SQLConfiguracao.getInstance().getValor(
					 * "localiza_num_nota"); ps = conn.prepareStatement(query);
					 * ps.setString(1, solicitacao.getNumSolicitacao());
					 * ps.setString(2, solicitacao.getItem()); ps.setString(3,
					 * solicitacao.getFilial()); rs2 = ps.executeQuery(); if
					 * (rs2.next()) {
					 * pedido.setNumeroNotaFiscal(rs2.getString("D1_DOC")
					 * .trim());
					 * pedido.setSerieNotaFiscal(rs2.getString("D1_SERIE")
					 * .trim()); } solicitacao.setPedido(pedido); }
					 */
					solicitacao.setHistoricos(buscaHistoricos(solicitacao));
					listaSolicitacoes.add(solicitacao);
				}
			} else {
				query += " AND C1_STATUS IN ('Bloqueado','Aprovado')";
				query += " ORDER BY C1_NUM,C1_PRODUTO";
				conn = GerenciadorConexao.getConexao();
				ps = conn.prepareStatement(query);
				ps.setInt(1, idUser);
				rs = ps.executeQuery();
				while (rs.next()) {
					solicitacao = new SolicitacaoBean();
					produto = new ProdutoBean();
					centroCusto = new CentroCustoBean();
					unidadeRequisicao = new UnidadeRequisicaoBean();
					listaProdutos = new ArrayList<ProdutoBean>();
					centroCusto.setCodigo(rs.getString("C1_CC").trim());
					unidadeRequisicao.setCodigo(rs.getString("C1_UNIDREQ"));
					produto.setCentroCusto(centroCusto);
					produto.setCodigo(rs.getString("C1_PRODUTO"));
					produto.setDescricao(rs.getString("C1_DESCRI").trim());
					produto.setUnidMedida(rs.getString("C1_UM"));
					produto.setOrdemProd(rs.getString("C1_NUMOP").trim());
					produto.setObservacao(rs.getString("C1_OBS").trim());
					produto.setQuantidade(rs.getDouble("C1_QUANT"));
					produto.setLocal(rs.getString("C1_LOCAL"));
					produto.setItemPosicao(rs.getString("C1_ITEMPED"));
					produto.setNecessidade(df.parse(rs.getString("C1_DATPRF")));
					produto.setFilial(rs.getString("C1_FILIAL"));
					listaProdutos.add(produto);
					solicitacao.setItensSolicitacao(listaProdutos);
					solicitacao.setDataEmissao(df.parse(rs
							.getString("C1_EMISSAO")));
					solicitacao.setHoraSolicitacao(rs.getString("C1_HORASOL"));
					solicitacao.setUnidadeRequisi(unidadeRequisicao);
					solicitacao.setFilial(rs.getString("C1_FILIAL"));
					solicitacao.setNumSolicitacao(rs.getString("C1_NUM"));
					solicitacao.setStatus(rs.getString("C1_STATUS"));
					solicitacao.setItem(rs.getString("C1_ITEM"));
					if (!"".equals(rs.getString("C1_DTAPROV").trim())) {
						solicitacao.setDataAprovacao(df.parse(rs
								.getString("C1_DTAPROV")));
					}
					if (!"".equals(rs.getString("C1_PEDIDO").trim())) {
						comprador = new CompradorBean();
						comprador.setCodigo(rs.getString("C1_CODCOMP"));
						comprador.setNome(rs.getString("Y1_NOME"));
						fornecedor = new FornecedorBean();
						fornecedor.setCodigo(rs.getString("C1_FORNECE"));
						fornecedor.setLoja(rs.getString("C1_LOJA"));
						fornecedor.setNome(super.buscaNomeFornecedor(
								fornecedor.getCodigo(), fornecedor.getLoja()));
						pedido = new PedidoBean();
						pedido.setFornecedor(fornecedor);
						pedido.setNumeroPedido(rs.getString("C1_PEDIDO"));
						pedido.setComprador(comprador);
						solicitacao.setPedido(pedido);
					}

					solicitacao.setHistoricos(buscaHistoricos(solicitacao));

					listaSolicitacoes.add(solicitacao);
				}
			}

		} catch (Exception e) {
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}
		return listaSolicitacoes;
	}

	@Override
	public List<SolicitacaoBean> buscaSolicitacoes(Map<String, String> param,
			UsuarioBean usuario) throws Exception {

		conn = null;
		ps = null;
		rs = null;
		query = null;
		List<SolicitacaoBean> listaSolicitacoes = new ArrayList<SolicitacaoBean>();
		List<ProdutoBean> listaProdutos;
		SolicitacaoBean solicitacao;
		PedidoBean pedido;
		ProdutoBean produto;
		CentroCustoBean centroCusto;
		UnidadeRequisicaoBean unidadeRequisicao;
		CompradorBean comprador;
		FornecedorBean fornecedor;
		ResultSet rs2;
		int psIndex = 1;
		try {
			query = SQLConfiguracao.getInstance().getValor(
					"localiza_solicitacoes");
			conn = GerenciadorConexao.getConexao();
			if (param != null) {
				if (param.get("SOLICITANTE") != null) {
					// query += " AND C1_EMISSAO >= '"
					// + df.format(df2.parse(param.get("DATADE"))) + "'";
					query += " AND C1_USERORI IN (" + param.get("SOLICITANTE")
							+ ") ";

				}
				if (param.get("DATADE") != null) {
					// query += " AND C1_EMISSAO >= '"
					// + df.format(df2.parse(param.get("DATADE"))) + "'";
					query += " AND C1_EMISSAO >= ?";
				}
				if (param.get("DATAATE") != null) {
					// query += " AND C1_EMISSAO <= '"
					// + df.format(df2.parse(param.get("DATADE"))) + "'";
					query += " AND C1_EMISSAO <= ?";
				}
				if (param.get("NUMSOLICITA") != null) {
					// query += " AND C1_NUM = '" + param.get("NUMSOLICITA") +
					// "'";
					query += " AND C1_NUM = ?";
				}
				if (param.get("CODPROD") != null) {
					// query += " AND C1_PRODUTO = '" + param.get("CODPROD") +
					// "'";
					query += " AND C1_PRODUTO = ?";
				}
				if (param.get("STATUS") != null) {

					// query += " AND C1_STATUS = '" + param.get("STATUS") +
					// "'";
					query += " AND C1_STATUS = ?";
				}
				if (param.get("FILIAL") != null) {
					// query += " AND C1_FILIAL = '" + param.get("FILIAL") +
					// "'";
					query += " AND C1_FILIAL = ?";
				}
				if (param.get("COMPRADOR") != null) {
					// query += " AND C1_FILIAL = '" + param.get("FILIAL") +
					// "'";
					query += " AND C1_CODCOMP = ?";
				}
				if (param.get("DATAENTREGADE") != null) {
					// query += " AND C1_FILIAL = '" + param.get("FILIAL") +
					// "'";
					query += " AND C1_DATPRF >= ?";
				}
				if (param.get("DATAENTREGAATE") != null) {
					// query += " AND C1_FILIAL = '" + param.get("FILIAL") +
					// "'";
					query += " AND C1_DATPRF <= ?";
				}
				query += " GROUP BY C1_DATPRF,C1_FILIAL,C1_NUM,C1_ITEM,C1_PRODUTO,C1_UM,"
						+ "C1_DESCRI,C1_EMISSAO,C1_HORASOL,C1_OBS,C1_CC,C1_NUMOP,C1_UNIDREQ,"
						+ "C1_QUANT,C1_QUJE,C1_LOCAL,C1_STATUS,C1_DTAPROV,C1_ITEMPED,"
						+ "C1_PEDIDO,C1_FORNECE,C1_LOJA,C1_CODCOMP,Y1_NOME,IDUSER,NOME";
				query += " ORDER BY C1_NUM,C1_PRODUTO";
				ps = conn.prepareStatement(query);
				/*
				 * if (param.get("SOLICITANTE") != null) { if
				 * (!"Todos".equals(param.get("SOLICITANTE"))) {
				 * ps.setString(psIndex++, param.get("SOLICITANTE")); } } else {
				 * ps.setLong(psIndex++, Long.parseLong(usuario.getCodigo())); }
				 */
				if (param.get("DATADE") != null) {
					ps.setDate(psIndex++, new java.sql.Date(Ferramentas
							.formataData(param.get("DATADE"), "dd/MM/yy")
							.getTime()));
				}
				if (param.get("DATAATE") != null) {
					ps.setDate(psIndex++, new java.sql.Date(Ferramentas
							.formataData(param.get("DATAATE"), "dd/MM/yy")
							.getTime()));
				}
				if (param.get("NUMSOLICITA") != null) {
					ps.setString(psIndex++, param.get("NUMSOLICITA"));
				}
				if (param.get("CODPROD") != null) {
					ps.setString(psIndex++, param.get("CODPROD"));
				}
				if (param.get("STATUS") != null) {
					ps.setString(psIndex++, param.get("STATUS"));
				}
				if (param.get("FILIAL") != null) {
					ps.setString(psIndex++, param.get("FILIAL"));
				}
				if (param.get("COMPRADOR") != null) {
					ps.setString(psIndex++, param.get("COMPRADOR"));
				}
				if (param.get("DATAENTREGADE") != null) {
					ps.setDate(
							psIndex++,
							new java.sql.Date(Ferramentas.formataData(
									param.get("DATAENTREGADE"), "dd/MM/yy")
									.getTime()));
				}
				if (param.get("DATAENTREGAATE") != null) {
					ps.setDate(
							psIndex++,
							new java.sql.Date(Ferramentas.formataData(
									param.get("DATAENTREGAATE"), "dd/MM/yy")
									.getTime()));
				}

				rs = ps.executeQuery();
				while (rs.next()) {
					solicitacao = new SolicitacaoBean();
					produto = new ProdutoBean();
					centroCusto = new CentroCustoBean();
					unidadeRequisicao = new UnidadeRequisicaoBean();
					listaProdutos = new ArrayList<ProdutoBean>();
					centroCusto.setCodigo(rs.getString("C1_CC").trim());
					unidadeRequisicao.setCodigo(rs.getString("C1_UNIDREQ"));
					produto.setCentroCusto(centroCusto);
					produto.setCodigo(rs.getString("C1_PRODUTO"));
					produto.setDescricao(rs.getString("C1_DESCRI").trim());
					produto.setUnidMedida(rs.getString("C1_UM"));
					produto.setOrdemProd(rs.getString("C1_NUMOP").trim());
					produto.setObservacao(rs.getString("C1_OBS").trim());
					produto.setQuantidade(rs.getDouble("C1_QUANT"));
					produto.setLocal(rs.getString("C1_LOCAL"));
					produto.setItemPosicao(rs.getString("C1_ITEMPED"));
					produto.setNecessidade(df.parse(rs.getString("C1_DATPRF")));
					produto.setQtdeAtendida(rs.getDouble("C1_QUJE"));
					produto.setSaldoAtual(rs.getDouble("TOTAL"));
					produto.setDiasFaltantes((produto.getNecessidade()
							.getTime() - new Date().getTime())
							/ (24 * 60 * 60 * 1000));
					produto.setFilial(rs.getString("C1_FILIAL"));

					query = SQLConfiguracao.getInstance().getValor(
							"localiza_leadtimeBz");
					ps = conn.prepareStatement(query);
					ps.setString(1, produto.getCodigo());
					ps.setString(2, rs.getString("C1_FILIAL"));
					rs2 = ps.executeQuery();
					if (rs2.next()) {
						produto.setPontoPedido(rs2.getDouble("BZ_EMIN"));
						produto.setLoteEconomico(rs2.getDouble("BZ_LE"));
					}
					listaProdutos.add(produto);
					solicitacao.setItensSolicitacao(listaProdutos);
					solicitacao.setDataEmissao(df.parse(rs
							.getString("C1_EMISSAO")));
					solicitacao.setHoraSolicitacao(rs.getString("C1_HORASOL"));
					solicitacao.setUnidadeRequisi(unidadeRequisicao);
					solicitacao.setFilial(rs.getString("C1_FILIAL"));
					solicitacao.setNumSolicitacao(rs.getString("C1_NUM"));
					solicitacao.setStatus(rs.getString("C1_STATUS"));
					solicitacao.setItem(rs.getString("C1_ITEM"));
					solicitacao.setUsuario(new UsuarioBean(rs.getLong("IDUSER")
							+ "", rs.getString("NOME"), null));
					comprador = new CompradorBean();
					comprador.setCodigo(rs.getString("C1_CODCOMP"));
					comprador.setNome(rs.getString("Y1_NOME"));
					solicitacao.setComprador(comprador);

					if (!"".equals(rs.getString("C1_DTAPROV").trim())) {
						solicitacao.setDataAprovacao(df.parse(rs
								.getString("C1_DTAPROV")));
					}
					if (!"".equals(rs.getString("C1_PEDIDO").trim())) {
						// solicitacao = buscaDadosPedido(solicitacao);

						comprador = new CompradorBean();
						comprador.setCodigo(rs.getString("C1_CODCOMP"));
						comprador.setNome(rs.getString("Y1_NOME"));
						pedido = new PedidoBean();
						pedido.setNumeroPedido(rs.getString("C1_PEDIDO"));
						fornecedor = new FornecedorBean();
						fornecedor.setCodigo(rs.getString("C1_FORNECE"));
						fornecedor.setLoja(rs.getString("C1_LOJA"));
						fornecedor.setNome(super.buscaNomeFornecedor(
								fornecedor.getCodigo(), fornecedor.getLoja()));
						pedido.setFornecedor(fornecedor);
						pedido.setComprador(comprador);
						solicitacao.setPedido(pedido);

						/*
						 * comprador = new CompradorBean();
						 * comprador.setCodigo(rs.getString("C1_CODCOMP"));
						 * comprador.setNome(rs.getString("Y1_NOME")); pedido =
						 * new PedidoBean();
						 * pedido.setNumeroPedido(rs.getString("C1_PEDIDO"));
						 * fornecedor = new FornecedorBean();
						 * fornecedor.setCodigo(rs.getString("C1_FORNECE"));
						 * fornecedor.setLoja(rs.getString("C1_LOJA"));
						 * fornecedor.setNome(super.buscaNomeFornecedor(
						 * fornecedor.getCodigo(), fornecedor.getLoja()));
						 * pedido.setFornecedor(fornecedor);
						 * pedido.setComprador(comprador);
						 * 
						 * query = SQLConfiguracao.getInstance().getValor(
						 * "localiza_num_nota"); ps =
						 * conn.prepareStatement(query); ps.setString(1,
						 * solicitacao.getNumSolicitacao()); ps.setString(2,
						 * solicitacao.getItem()); ps.setString(3,
						 * solicitacao.getFilial()); rs2 = ps.executeQuery(); if
						 * (rs2.next()) {
						 * pedido.setNumeroNotaFiscal(rs2.getString("D1_DOC")
						 * .trim());
						 * pedido.setSerieNotaFiscal(rs2.getString("D1_SERIE")
						 * .trim()); } solicitacao.setPedido(pedido);
						 */
					}
					solicitacao.setHistoricos(buscaHistoricos(solicitacao));
					listaSolicitacoes.add(solicitacao);
				}
			} else {
				query += " AND C1_STATUS IN ('Bloqueado','Aprovado')";
				query += " AND C1_USERORI = ? ";
				query += " GROUP BY C1_DATPRF,C1_FILIAL,C1_NUM,C1_ITEM,C1_PRODUTO,C1_UM,"
						+ "C1_DESCRI,C1_EMISSAO,C1_HORASOL,C1_OBS,C1_CC,C1_NUMOP,C1_UNIDREQ,"
						+ "C1_QUANT,C1_QUJE,C1_LOCAL,C1_STATUS,C1_DTAPROV,C1_ITEMPED,"
						+ "C1_PEDIDO,C1_FORNECE,C1_LOJA,C1_CODCOMP,Y1_NOME,IDUSER,NOME";
				query += " ORDER BY C1_NUM,C1_PRODUTO";
				conn = GerenciadorConexao.getConexao();
				ps = conn.prepareStatement(query);
				ps.setLong(1, Long.parseLong(usuario.getCodigo()));
				rs = ps.executeQuery();
				while (rs.next()) {
					solicitacao = new SolicitacaoBean();
					produto = new ProdutoBean();
					centroCusto = new CentroCustoBean();
					unidadeRequisicao = new UnidadeRequisicaoBean();
					listaProdutos = new ArrayList<ProdutoBean>();
					centroCusto.setCodigo(rs.getString("C1_CC").trim());
					unidadeRequisicao.setCodigo(rs.getString("C1_UNIDREQ"));
					produto.setCentroCusto(centroCusto);
					produto.setCodigo(rs.getString("C1_PRODUTO"));
					produto.setDescricao(rs.getString("C1_DESCRI").trim());
					produto.setUnidMedida(rs.getString("C1_UM"));
					produto.setOrdemProd(rs.getString("C1_NUMOP").trim());
					produto.setObservacao(rs.getString("C1_OBS").trim());
					produto.setQuantidade(rs.getDouble("C1_QUANT"));
					produto.setLocal(rs.getString("C1_LOCAL"));
					produto.setItemPosicao(rs.getString("C1_ITEMPED"));
					produto.setNecessidade(df.parse(rs.getString("C1_DATPRF")));
					listaProdutos.add(produto);
					solicitacao.setItensSolicitacao(listaProdutos);
					solicitacao.setDataEmissao(df.parse(rs
							.getString("C1_EMISSAO")));
					solicitacao.setHoraSolicitacao(rs.getString("C1_HORASOL"));
					solicitacao.setUnidadeRequisi(unidadeRequisicao);
					solicitacao.setFilial(rs.getString("C1_FILIAL"));
					solicitacao.setNumSolicitacao(rs.getString("C1_NUM"));
					solicitacao.setStatus(rs.getString("C1_STATUS"));
					solicitacao.setItem(rs.getString("C1_ITEM"));
					comprador = new CompradorBean();
					comprador.setCodigo(rs.getString("C1_CODCOMP"));
					comprador.setNome(rs.getString("Y1_NOME"));
					solicitacao.setComprador(comprador);
					if (!"".equals(rs.getString("C1_DTAPROV").trim())) {
						solicitacao.setDataAprovacao(df.parse(rs
								.getString("C1_DTAPROV")));
					}
					if (!"".equals(rs.getString("C1_PEDIDO").trim())) {
						comprador = new CompradorBean();
						comprador.setCodigo(rs.getString("C1_CODCOMP"));
						comprador.setNome(rs.getString("Y1_NOME"));
						fornecedor = new FornecedorBean();
						fornecedor.setCodigo(rs.getString("C1_FORNECE"));
						fornecedor.setLoja(rs.getString("C1_LOJA"));
						fornecedor.setNome(super.buscaNomeFornecedor(
								fornecedor.getCodigo(), fornecedor.getLoja()));
						pedido = new PedidoBean();
						pedido.setFornecedor(fornecedor);
						pedido.setNumeroPedido(rs.getString("C1_PEDIDO"));
						pedido.setComprador(comprador);
						solicitacao.setPedido(pedido);
					}

					solicitacao.setHistoricos(buscaHistoricos(solicitacao));

					listaSolicitacoes.add(solicitacao);
				}
			}

		} catch (Exception e) {
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}
		return listaSolicitacoes;
	}

	@Override
	public void excluir(SolicitacaoBean solicitacao) throws Exception {
		conn = null;
		ps = null;
		query = null;
		try {
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance()
					.getValor("exclui_solicitacao");
			ps = conn.prepareStatement(query);
			ps.setString(1, solicitacao.getFilial().trim());
			ps.setString(2, solicitacao.getNumSolicitacao().trim());
			ps.setString(3, solicitacao.getItem().trim());
			ps.executeUpdate();
			conn.commit();
		} catch (Exception e) {
			throw e;
		}

	}

	@Override
	public void editar(SolicitacaoBean solicitacao) throws Exception {
		conn = null;
		ps = null;
		query = null;
		try {
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance()
					.getValor("altera_solicitacao");
			if (solicitacao.getStatus().trim().equals("Negado")) {
				query += " , C1_STATUS = 'Bloqueado', C1_APROV = 'B'";
			}
			query += " WHERE C1_FILIAL = ? AND C1_NUM = ? AND C1_ITEM = ? AND SC1010.D_E_L_E_T_ <> '*'";
			ps = conn.prepareStatement(query);
			ps.setString(1, solicitacao.getItensSolicitacao().get(0)
					.getCentroCusto().getCodigo());
			ps.setString(2, solicitacao.getItensSolicitacao().get(0)
					.getObservacao());
			ps.setString(3, solicitacao.getItensSolicitacao().get(0)
					.getOrdemProd());
			ps.setDouble(4, solicitacao.getItensSolicitacao().get(0)
					.getQuantidade());
			ps.setString(5, solicitacao.getItensSolicitacao().get(0).getLocal());
			ps.setString(6, solicitacao.getComprador().getCodigo());
			ps.setString(7, solicitacao.getFilial());
			ps.setString(8, solicitacao.getNumSolicitacao());
			ps.setString(9, solicitacao.getItem());
			ps.executeUpdate();
			conn.commit();
		} catch (Exception e) {
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}
	}

	@SuppressWarnings("unchecked")
	public List<P> buscaSolicitacaoComprador(String status,
			UsuarioBean usuario, Map<String, String> parametros)
			throws Exception {
		List<SolicitacaoBean> listaSolicita = new ArrayList<SolicitacaoBean>();
		List<ProdutoBean> listaProdutos = new ArrayList<ProdutoBean>();
		SolicitacaoBean solicitacao = null;
		ProdutoBean produto = null;
		CentroCustoBean centroCusto = null;
		UnidadeRequisicaoBean unidadeRequisicao = null;
		conn = GerenciadorConexao.getConexao();
		int psIndex = 1;
		if (status.trim().equals("Bloqueado")) {
			query = SQLConfiguracao.getInstance().getValor(
					"localiza_solicita_bloqueada");
			if (parametros.get("DATADE") != null) {
				query += " AND C1_EMISSAO >= ?";
			}
			if (parametros.get("DATAATE") != null) {
				query += " AND C1_EMISSAO <= ?";
			}
			if (parametros.get("NUMSOL") != null) {
				query += " AND C1_NUM = ?";
			}
			if (parametros.get("PRODUTO") != null) {
				query += " AND C1_NUM IN (SELECT DISTINCT(C1_NUM) FROM SC1010 "
						+ "WHERE C1_PRODUTO = ? AND SC1010.D_E_L_E_T_ <> '*' "
						+ "AND C1_STATUS = 'Bloqueado' AND C1_PEDIDO = '')";
			}
			if (parametros.get("FILIAL") != null) {
				query += " AND C1_FILIAL = ?";
			}

			try {
				query += " ORDER BY C1_FILIAL,C1_NUM,C1_ITEM";
				ps = conn.prepareStatement(query,
						ResultSet.TYPE_SCROLL_SENSITIVE,
						ResultSet.CONCUR_UPDATABLE);
				ps.setString(psIndex++, usuario.getComprador()
						.getCodCompMicro());
				if (parametros.get("DATADE") != null) {
					ps.setString(
							psIndex++,
							Ferramentas.formataData(
									Ferramentas.formataData(
											parametros.get("DATADE"),
											"dd/MM/yy").getTime(), "yyyyMMdd"));
				}
				if (parametros.get("DATAATE") != null) {
					ps.setString(
							psIndex++,
							Ferramentas.formataData(
									Ferramentas.formataData(
											parametros.get("DATAATE"),
											"dd/MM/yy").getTime(), "yyyyMMdd"));
				}
				if (parametros.get("NUMSOL") != null) {
					ps.setString(psIndex++, parametros.get("NUMSOL"));
				}
				if (parametros.get("PRODUTO") != null) {
					ps.setString(psIndex++, parametros.get("PRODUTO"));
				}
				if (parametros.get("FILIAL") != null) {
					ps.setString(psIndex++, parametros.get("FILIAL"));
				}
				rs = ps.executeQuery();
				while (rs.next()) {

					produto = new ProdutoBean();
					centroCusto = new CentroCustoBean();
					centroCusto.setCodigo(rs.getString("C1_CC").trim());
					produto.setCentroCusto(centroCusto);
					produto.setCodigo(rs.getString("C1_PRODUTO"));
					produto.setDescricao(rs.getString("C1_DESCRI").trim());
					produto.setUnidMedida(rs.getString("C1_UM"));
					produto.setOrdemProd(rs.getString("C1_NUMOP").trim());
					produto.setObservacao(rs.getString("C1_OBS").trim());
					produto.setQuantidade(rs.getDouble("C1_QUANT"));
					produto.setLocal(rs.getString("C1_LOCAL"));
					produto.setItemPosicao(rs.getString("C1_ITEM"));
					if (!"".equals(rs.getString("C1_DATPRF").trim())) {
						produto.setNecessidade(df.parse(rs
								.getString("C1_DATPRF")));
					} else {
						produto.setNecessidade(null);
					}

					produto.setQtdeAtendida(rs.getDouble("C1_QUJE"));
					produto.setFilial(rs.getString("C1_FILIAL"));
					if (solicitacao != null) {
						if (solicitacao.getNumSolicitacao().trim()
								.equals(rs.getString("C1_NUM"))) {
							listaProdutos.add(produto);
							if (!rs.next()) {
								solicitacao.setItensSolicitacao(listaProdutos);
								listaSolicita.add(solicitacao);
							} else {
								rs.previous();
							}
						} else {
							solicitacao.setItensSolicitacao(listaProdutos);
							listaSolicita.add(solicitacao);
							unidadeRequisicao = new UnidadeRequisicaoBean();
							listaProdutos = new ArrayList<ProdutoBean>();
							unidadeRequisicao.setCodigo(rs
									.getString("C1_UNIDREQ"));
							unidadeRequisicao.setDescricao(rs
									.getString("Y3_DESC"));
							solicitacao = new SolicitacaoBean();
							solicitacao.setDataEmissao(df.parse(rs
									.getString("C1_EMISSAO")));
							solicitacao.setHoraSolicitacao(rs
									.getString("C1_HORASOL"));
							solicitacao.setUnidadeRequisi(unidadeRequisicao);
							solicitacao.setFilial(rs.getString("C1_FILIAL"));
							solicitacao.setNumSolicitacao(rs
									.getString("C1_NUM"));
							solicitacao.setStatus(rs.getString("C1_STATUS"));
							solicitacao.setItem(rs.getString("C1_ITEM"));
							solicitacao
									.setUsuario(new UsuarioBean("", rs
											.getString("C1_SOLICIT"),
											new EmpresaBean()));
							listaProdutos.add(produto);
							if (!rs.next()) {
								solicitacao.setItensSolicitacao(listaProdutos);
								listaSolicita.add(solicitacao);
							} else {
								rs.previous();
							}
						}

					} else {
						unidadeRequisicao = new UnidadeRequisicaoBean();
						listaProdutos = new ArrayList<ProdutoBean>();
						unidadeRequisicao.setCodigo(rs.getString("C1_UNIDREQ"));
						unidadeRequisicao.setDescricao(rs.getString("Y3_DESC"));
						solicitacao = new SolicitacaoBean();
						solicitacao.setDataEmissao(df.parse(rs
								.getString("C1_EMISSAO")));
						solicitacao.setHoraSolicitacao(rs
								.getString("C1_HORASOL"));
						solicitacao.setUnidadeRequisi(unidadeRequisicao);
						solicitacao.setFilial(rs.getString("C1_FILIAL"));
						solicitacao.setNumSolicitacao(rs.getString("C1_NUM"));
						solicitacao.setStatus(rs.getString("C1_STATUS"));
						solicitacao.setItem(rs.getString("C1_ITEM"));
						solicitacao.setUsuario(new UsuarioBean("", rs
								.getString("C1_SOLICIT"), new EmpresaBean()));
						listaProdutos.add(produto);
						if (!rs.next()) {
							solicitacao.setItensSolicitacao(listaProdutos);
							listaSolicita.add(solicitacao);
						} else {
							rs.previous();
						}
					}
				}
			} catch (Exception e) {
				throw e;
			} finally {
				super.fecharRecursos(ps, rs);
			}

		} else if (status.trim().equals("Aprovado")) {
			listaSolicita = buscaSolicitacoesComprar(usuario, parametros,
					listaSolicita, listaProdutos, solicitacao, produto,
					centroCusto, unidadeRequisicao);
		}

		return (List<P>) listaSolicita;
	}

	@SuppressWarnings("unchecked")
	public List<P> buscaSolicitacoesCompradorConsulta(
			Map<String, String> param, UsuarioBean usuario) throws Exception {

		List<SolicitacaoBean> listaSolicita = new ArrayList<SolicitacaoBean>();
		List<ProdutoBean> listaProdutos = new ArrayList<ProdutoBean>();
		SolicitacaoBean solicitacao = null;
		ProdutoBean produto = null;
		CentroCustoBean centroCusto = null;
		PedidoBean pedido = null;
		CompradorBean comprador = null;
		FornecedorBean fornecedor = null;
		UnidadeRequisicaoBean unidadeRequisicao = null;
		ResultSet rs2 = null;
		conn = GerenciadorConexao.getConexao();
		int psIndex = 1;
		query = SQLConfiguracao.getInstance().getValor(
				"localiza_solicita_comp_consulta");
		if (param.get("DATADE") != null) {
			query += " AND C1_EMISSAO >= ?";
		}
		if (param.get("DATAATE") != null) {
			query += " AND C1_EMISSAO <= ?";
		}
		if (param.get("NUMSOL") != null) {
			query += " AND C1_NUM = ?";
		}
		if (param.get("PRODUTO") != null) {
			query += " AND C1_NUM IN (SELECT DISTINCT(C1_NUM) FROM SC1010 "
					+ "WHERE C1_PRODUTO = ? AND SC1010.D_E_L_E_T_ <> '*')";
		}
		if (param.get("FILIAL") != null) {
			query += " AND C1_FILIAL = ?";
		}
		if (param.get("NUMPEDIDO") != null) {
			query += " AND C1_PEDIDO = ?";
		}
		if (param.get("STATUS") != null) {
			query += " AND C1_STATUS = ?";
		}
		if (param.get("NUMOP") != null) {
			query += " AND C1_NUMOP LIKE ?";
		}
		if (param.get("CODFORNE") != null) {
			query += " AND A2_COD = ?";
		}
		if (param.get("NOMEFORNE") != null) {
			query += " AND A2_NOME LIKE ?";
		}
		if (param.get("DESCPROD") != null) {
			query += " AND C1_DESCRI LIKE ?";
		}

		try {
			query += " ORDER BY C1_FILIAL,C1_NUM,C1_ITEM";
			ps = conn.prepareStatement(query, ResultSet.TYPE_SCROLL_SENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
			ps.setString(psIndex++, usuario.getComprador().getCodCompMicro());
			if (param.get("DATADE") != null) {
				ps.setString(
						psIndex++,
						Ferramentas.formataData(
								Ferramentas.formataData(param.get("DATADE"),
										"dd/MM/yy").getTime(), "yyyyMMdd"));
			}
			if (param.get("DATAATE") != null) {
				ps.setString(
						psIndex++,
						Ferramentas.formataData(
								Ferramentas.formataData(param.get("DATAATE"),
										"dd/MM/yy").getTime(), "yyyyMMdd"));
			}
			if (param.get("NUMSOL") != null) {
				ps.setString(psIndex++, param.get("NUMSOL"));
			}
			if (param.get("PRODUTO") != null) {
				ps.setString(psIndex++, param.get("PRODUTO"));
			}
			if (param.get("FILIAL") != null) {
				ps.setString(psIndex++, param.get("FILIAL"));
			}
			if (param.get("NUMPEDIDO") != null) {
				ps.setString(psIndex++, param.get("NUMPEDIDO"));
			}
			if (param.get("STATUS") != null) {
				ps.setString(psIndex++, param.get("STATUS"));
			}
			if (param.get("NUMOP") != null) {
				ps.setString(psIndex++, "%%" + param.get("NUMOP") + "%%");
			}
			if (param.get("CODFORNE") != null) {
				ps.setString(psIndex++, param.get("CODFORNE"));
			}
			if (param.get("NOMEFORNE") != null) {
				ps.setString(psIndex++, "%%"
						+ param.get("NOMEFORNE").toUpperCase() + "%%");
			}
			if (param.get("DESCPROD") != null) {
				ps.setString(psIndex++, "%%"
						+ param.get("DESCPROD").toUpperCase() + "%%");
			}
			rs = ps.executeQuery();
			while (rs.next()) {
				produto = new ProdutoBean();
				centroCusto = new CentroCustoBean();
				centroCusto.setCodigo(rs.getString("C1_CC").trim());
				produto.setCentroCusto(centroCusto);
				produto.setCodigo(rs.getString("C1_PRODUTO"));
				produto.setDescricao(rs.getString("C1_DESCRI").trim());
				produto.setUnidMedida(rs.getString("C1_UM"));
				produto.setOrdemProd(rs.getString("C1_NUMOP").trim());
				produto.setObservacao(rs.getString("C1_OBS").trim());
				produto.setQuantidade(rs.getDouble("C1_QUANT"));
				produto.setLocal(rs.getString("C1_LOCAL"));
				produto.setItemPosicao(rs.getString("C1_ITEM"));
				produto.setStatusProduto(rs.getString("C1_STATUS"));
				produto.setFilial(rs.getString("C1_FILIAL"));
				if (rs.getString("C1_DATPRF") != null
						&& !"".equals(rs.getString("C1_DATPRF").trim())) {
					produto.setNecessidade(df.parse(rs.getString("C1_DATPRF")));
				}
				produto.setQtdeAtendida(rs.getDouble("C1_QUJE"));
				if (solicitacao != null) {
					if (solicitacao.getNumSolicitacao().trim()
							.equals(rs.getString("C1_NUM"))
							&& solicitacao.getPedido() != null
							&& solicitacao.getPedido().getNumeroPedido()
									.equals(rs.getString("C1_PEDIDO"))) {
						listaProdutos.add(produto);
						if (!rs.next()) {
							solicitacao.setItensSolicitacao(listaProdutos);
							listaSolicita.add(solicitacao);
						} else {
							rs.previous();
						}
					} else {
						solicitacao.setItensSolicitacao(listaProdutos);
						listaSolicita.add(solicitacao);
						unidadeRequisicao = new UnidadeRequisicaoBean();
						listaProdutos = new ArrayList<ProdutoBean>();
						unidadeRequisicao.setCodigo(rs.getString("C1_UNIDREQ"));
						unidadeRequisicao.setDescricao(rs.getString("Y3_DESC"));
						solicitacao = new SolicitacaoBean();
						solicitacao.setDataEmissao(df.parse(rs
								.getString("C1_EMISSAO")));
						solicitacao.setHoraSolicitacao(rs
								.getString("C1_HORASOL"));
						solicitacao.setUnidadeRequisi(unidadeRequisicao);
						solicitacao.setFilial(rs.getString("C1_FILIAL"));
						solicitacao.setNumSolicitacao(rs.getString("C1_NUM"));
						solicitacao.setStatus(rs.getString("C1_STATUS"));
						solicitacao.setItem(rs.getString("C1_ITEM"));
						solicitacao.setUsuario(new UsuarioBean("", rs
								.getString("C1_SOLICIT"), new EmpresaBean()));
						if (!"".equals(rs.getString("C1_PEDIDO").trim())) {
							comprador = new CompradorBean();
							comprador.setCodigo(rs.getString("C1_CODCOMP"));
							comprador.setNome(rs.getString("Y1_NOME"));
							pedido = new PedidoBean();
							pedido.setNumeroPedido(rs.getString("C1_PEDIDO"));
							fornecedor = new FornecedorBean();
							fornecedor.setCodigo(rs.getString("C1_FORNECE"));
							fornecedor.setLoja(rs.getString("C1_LOJA"));
							fornecedor.setNome(super.buscaNomeFornecedor(
									fornecedor.getCodigo(),
									fornecedor.getLoja()));
							pedido = new PedidoBean();
							pedido.setFornecedor(fornecedor);
							pedido.setNumeroPedido(rs.getString("C1_PEDIDO"));
							query = SQLConfiguracao.getInstance().getValor(
									"localiza_data_visua_for");
							ps = conn.prepareStatement(query);
							ps.setString(1, solicitacao.getFilial());
							ps.setString(2, pedido.getNumeroPedido());
							rs2 = ps.executeQuery();
							if (rs2.next()) {
								if (!"".equals(rs2.getString("C7_DTVIFOR")
										.trim())) {
									pedido.setDtVisualizado(Ferramentas.formataData(
											rs2.getString("C7_DTVIFOR"),
											"yyyyMMdd"));
								}
								pedido.setCondPag(new CondicaoPagamentoBean(rs2
										.getString("C7_COND"), "", ""));
								pedido.setTransportadora(new TransportadoraBean(
										rs2.getString("C7_TRNSP"), ""));
								pedido.setTipoFrete(rs2.getString("C7_TPFRETE"));
								pedido.getFornecedor().setContato(
										rs2.getString("C7_CONTATO"));
								pedido.setDtEmissao(Ferramentas.formataData(
										rs2.getString("C7_EMISSAO"), "yyyyMMdd"));
							}
							solicitacao.setPedido(pedido);
						}
						listaProdutos.add(produto);
						if (!rs.next()) {
							solicitacao.setItensSolicitacao(listaProdutos);
							listaSolicita.add(solicitacao);
						} else {
							rs.previous();
						}
					}

				} else {
					unidadeRequisicao = new UnidadeRequisicaoBean();
					listaProdutos = new ArrayList<ProdutoBean>();
					unidadeRequisicao.setCodigo(rs.getString("C1_UNIDREQ"));
					unidadeRequisicao.setDescricao(rs.getString("Y3_DESC"));
					solicitacao = new SolicitacaoBean();
					solicitacao.setDataEmissao(df.parse(rs
							.getString("C1_EMISSAO")));
					solicitacao.setHoraSolicitacao(rs.getString("C1_HORASOL"));
					solicitacao.setUnidadeRequisi(unidadeRequisicao);
					solicitacao.setFilial(rs.getString("C1_FILIAL"));
					solicitacao.setNumSolicitacao(rs.getString("C1_NUM"));
					solicitacao.setStatus(rs.getString("C1_STATUS"));
					solicitacao.setItem(rs.getString("C1_ITEM"));
					solicitacao.setUsuario(new UsuarioBean("", rs
							.getString("C1_SOLICIT"), new EmpresaBean()));

					if (!"".equals(rs.getString("C1_PEDIDO").trim())) {
						// solicitacao = buscaDadosPedido(solicitacao);
						comprador = new CompradorBean();
						comprador.setCodigo(rs.getString("C1_CODCOMP"));
						comprador.setNome(rs.getString("Y1_NOME"));
						pedido = new PedidoBean();
						pedido.setNumeroPedido(rs.getString("C1_PEDIDO"));
						fornecedor = new FornecedorBean();
						fornecedor.setCodigo(rs.getString("C1_FORNECE"));
						fornecedor.setLoja(rs.getString("C1_LOJA"));
						fornecedor.setNome(super.buscaNomeFornecedor(
								fornecedor.getCodigo(), fornecedor.getLoja()));
						pedido = new PedidoBean();
						pedido.setFornecedor(fornecedor);
						pedido.setNumeroPedido(rs.getString("C1_PEDIDO"));
						query = SQLConfiguracao.getInstance().getValor(
								"localiza_data_visua_for");
						ps = conn.prepareStatement(query);
						ps.setString(1, solicitacao.getFilial());
						ps.setString(2, pedido.getNumeroPedido());
						rs2 = ps.executeQuery();
						if (rs2.next()) {
							if (!"".equals(rs2.getString("C7_DTVIFOR").trim())) {
								pedido.setDtVisualizado(Ferramentas
										.formataData(
												rs2.getString("C7_DTVIFOR"),
												"yyyyMMdd"));
							}
							pedido.setCondPag(new CondicaoPagamentoBean(rs2
									.getString("C7_COND"), "", ""));
							pedido.setTransportadora(new TransportadoraBean(rs2
									.getString("C7_TRNSP"), ""));
							pedido.setTipoFrete(rs2.getString("C7_TPFRETE"));
							pedido.getFornecedor().setContato(
									rs2.getString("C7_CONTATO"));
							pedido.setDtEmissao(Ferramentas.formataData(
									rs2.getString("C7_EMISSAO"), "yyyyMMdd"));
						}
						solicitacao.setPedido(pedido);
					}

					listaProdutos.add(produto);
					if (!rs.next()) {
						solicitacao.setItensSolicitacao(listaProdutos);
						listaSolicita.add(solicitacao);
					} else {
						rs.previous();
					}
				}
			}
		} catch (Exception e) {
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}
		return (List<P>) listaSolicita;

	}

	public SolicitacaoBean buscaDadosPedido(SolicitacaoBean solicitacao)
			throws Exception {
		// CompradorBean comprador;
		// FornecedorBean fornecedor;
		// PedidoBean pedido;
		try {
			// comprador = new CompradorBean();
			// comprador.setCodigo(rs.getString("C1_CODCOMP"));
			// comprador.setNome(rs.getString("Y1_NOME"));
			// pedido = new PedidoBean();
			// pedido.setNumeroPedido(rs.getString("C1_PEDIDO"));
			// fornecedor = new FornecedorBean();
			// fornecedor.setCodigo(rs.getString("C1_FORNECE"));
			// fornecedor.setLoja(rs.getString("C1_LOJA"));
			// fornecedor.setNome(super.buscaNomeFornecedor(
			// fornecedor.getCodigo(), fornecedor.getLoja()));
			// pedido.setFornecedor(fornecedor);
			// pedido.setComprador(comprador);
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance().getValor("localiza_num_nota");
			ps = conn.prepareStatement(query);
			ps.setString(1, solicitacao.getNumSolicitacao());
			ps.setString(2, solicitacao.getItem());
			ps.setString(3, solicitacao.getFilial());
			rs = ps.executeQuery();
			solicitacao.getPedido().setNumeroNotaFiscal("");
			while (rs.next()) {
				if (solicitacao.getPedido().getNumeroNotaFiscal() != null) {
					solicitacao.getPedido().setNumeroNotaFiscal(
							solicitacao.getPedido().getNumeroNotaFiscal()
									+ " - " + rs.getString("D1_DOC").trim()
									+ "/" + rs.getString("D1_SERIE").trim());
					// pedido.setSerieNotaFiscal(rs2.getString("D1_SERIE").trim());
					solicitacao.getPedido().setSerieNotaFiscal("");
				} else {
					solicitacao.getPedido().setNumeroNotaFiscal(
							rs.getString("D1_DOC").trim() + "/"
									+ rs.getString("D1_SERIE").trim());
					solicitacao.getPedido().setSerieNotaFiscal("");
				}

			}
		} catch (Exception e) {
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}

		return solicitacao;
	}

	private List<SolicitacaoBean> buscaSolicitacoesComprar(UsuarioBean usuario,
			Map<String, String> parametros,
			List<SolicitacaoBean> listaSolicita,
			List<ProdutoBean> listaProdutos, SolicitacaoBean solicitacao,
			ProdutoBean produto, CentroCustoBean centroCusto,
			UnidadeRequisicaoBean unidadeRequisicao) throws Exception {

		int psIndex = 1;
		query = SQLConfiguracao.getInstance().getValor(
				"localiza_solicita_liberada_com");
		if (parametros.get("DATADE") != null) {
			query += " AND C1_EMISSAO >= ?";
		}
		if (parametros.get("DATAATE") != null) {
			query += " AND C1_EMISSAO <= ?";
		}
		if (parametros.get("NUMSOL") != null) {
			query += " AND C1_NUM = ?";
		}
		if (parametros.get("PRODUTO") != null) {
			query += " AND C1_NUM IN (SELECT DISTINCT(C1_NUM) FROM SC1010 "
					+ "WHERE C1_PRODUTO = ? AND SC1010.D_E_L_E_T_ <> '*' "
					+ "AND C1_STATUS = 'Aprovado' AND C1_PEDIDO = '')";
		}
		if (parametros.get("FILIAL") != null) {
			query += " AND C1_FILIAL = ?";
		}

		try {
			query += " ORDER BY C1_EMISSAO DESC, C1_FILIAL,C1_NUM,C1_ITEM";
			ps = conn.prepareStatement(query, ResultSet.TYPE_SCROLL_SENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
			ps.setString(psIndex++, usuario.getComprador().getCodCompMicro());
			if (parametros.get("DATADE") != null) {
				ps.setString(psIndex++, Ferramentas.formataData(Ferramentas
						.formataData(parametros.get("DATADE"), "dd/MM/yy")
						.getTime(), "yyyyMMdd"));
			}
			if (parametros.get("DATAATE") != null) {
				ps.setString(psIndex++, Ferramentas.formataData(Ferramentas
						.formataData(parametros.get("DATAATE"), "dd/MM/yy")
						.getTime(), "yyyyMMdd"));
			}
			if (parametros.get("NUMSOL") != null) {
				ps.setString(psIndex++, parametros.get("NUMSOL"));
			}
			if (parametros.get("PRODUTO") != null) {
				ps.setString(psIndex++, parametros.get("PRODUTO"));
			}
			if (parametros.get("FILIAL") != null) {
				ps.setString(psIndex++, parametros.get("FILIAL"));
			}
			rs = ps.executeQuery();
			while (rs.next()) {
				produto = new ProdutoBean();
				centroCusto = new CentroCustoBean();
				centroCusto.setCodigo(rs.getString("C1_CC").trim());
				produto.setCentroCusto(centroCusto);
				produto.setCodigo(rs.getString("C1_PRODUTO"));
				produto.setDescricao(rs.getString("C1_DESCRI").trim());
				produto.setUnidMedida(rs.getString("C1_UM"));
				produto.setOrdemProd(rs.getString("C1_NUMOP").trim());
				produto.setObservacao(rs.getString("C1_OBS").trim());
				produto.setQuantidade(rs.getDouble("C1_QUANT"));
				produto.setLocal(rs.getString("C1_LOCAL"));
				produto.setItemPosicao(rs.getString("C1_ITEM"));
				produto.setNecessidade(df.parse(rs.getString("C1_DATPRF")));
				produto.setQtdeAtendida(rs.getDouble("C1_QUJE"));
				produto.setIpi(rs.getDouble("B1_IPI"));
				produto.setFilial(rs.getString("C1_FILIAL"));

				if (solicitacao != null) {
					if (solicitacao.getNumSolicitacao().trim()
							.equals(rs.getString("C1_NUM"))) {
						listaProdutos.add(produto);
						if (!rs.next()) {
							solicitacao.setItensSolicitacao(listaProdutos);
							listaSolicita.add(solicitacao);
						} else {
							rs.previous();
						}
					} else {
						solicitacao.setItensSolicitacao(listaProdutos);
						listaSolicita.add(solicitacao);
						unidadeRequisicao = new UnidadeRequisicaoBean();
						listaProdutos = new ArrayList<ProdutoBean>();
						unidadeRequisicao.setCodigo(rs.getString("C1_UNIDREQ"));
						unidadeRequisicao.setDescricao(rs.getString("Y3_DESC"));
						solicitacao = new SolicitacaoBean();
						solicitacao.setDataEmissao(df.parse(rs
								.getString("C1_EMISSAO")));
						solicitacao.setHoraSolicitacao(rs
								.getString("C1_HORASOL"));
						solicitacao.setUnidadeRequisi(unidadeRequisicao);
						solicitacao.setFilial(rs.getString("C1_FILIAL"));
						solicitacao.setNumSolicitacao(rs.getString("C1_NUM"));
						solicitacao.setStatus(rs.getString("C1_STATUS"));
						solicitacao.setItem(rs.getString("C1_ITEM"));
						solicitacao.setUsuario(new UsuarioBean("", rs
								.getString("C1_SOLICIT"), new EmpresaBean()));
						listaProdutos.add(produto);
						if (!rs.next()) {
							solicitacao.setItensSolicitacao(listaProdutos);
							listaSolicita.add(solicitacao);
						} else {
							rs.previous();
						}
					}

				} else {
					unidadeRequisicao = new UnidadeRequisicaoBean();
					listaProdutos = new ArrayList<ProdutoBean>();
					unidadeRequisicao.setCodigo(rs.getString("C1_UNIDREQ"));
					unidadeRequisicao.setDescricao(rs.getString("Y3_DESC"));
					solicitacao = new SolicitacaoBean();
					solicitacao.setDataEmissao(df.parse(rs
							.getString("C1_EMISSAO")));
					solicitacao.setHoraSolicitacao(rs.getString("C1_HORASOL"));
					solicitacao.setUnidadeRequisi(unidadeRequisicao);
					solicitacao.setFilial(rs.getString("C1_FILIAL"));
					solicitacao.setNumSolicitacao(rs.getString("C1_NUM"));
					solicitacao.setStatus(rs.getString("C1_STATUS"));
					solicitacao.setItem(rs.getString("C1_ITEM"));
					solicitacao.setUsuario(new UsuarioBean("", rs
							.getString("C1_SOLICIT"), new EmpresaBean()));
					listaProdutos.add(produto);
					if (!rs.next()) {
						solicitacao.setItensSolicitacao(listaProdutos);
						listaSolicita.add(solicitacao);
					} else {
						rs.previous();
					}
				}
			}
		} catch (Exception e) {

		}

		return listaSolicita;
	}

	public void liberaSolicitacao(SolicitacaoBean solicitacao) throws Exception {
		try {
			conn = GerenciadorConexao.getConexao();
			for (int i = 0; i < solicitacao.getItensSolicitacao().size(); i++) {
				query = SQLConfiguracao.getInstance().getValor(
						"libera_solicitacao");
				ps = conn.prepareStatement(query);
				ps.setString(1, solicitacao.getFilial());
				ps.setString(2, solicitacao.getNumSolicitacao());
				ps.setString(3, solicitacao.getItensSolicitacao().get(i)
						.getItemPosicao());
				ps.execute();
				conn.commit();
			}
		} catch (Exception e) {
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}
	}

	public void bloqueiaSolicitacao(SolicitacaoBean solicitacao)
			throws Exception {
		try {
			conn = GerenciadorConexao.getConexao();
			for (int i = 0; i < solicitacao.getItensSolicitacao().size(); i++) {
				query = SQLConfiguracao.getInstance().getValor(
						"bloqueia_solicitacao");
				ps = conn.prepareStatement(query);
				ps.setString(1, solicitacao.getFilial());
				ps.setString(2, solicitacao.getNumSolicitacao());
				ps.setString(3, solicitacao.getItensSolicitacao().get(i)
						.getItemPosicao());
				ps.execute();
				conn.commit();
			}
		} catch (Exception e) {
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}
	}

	public void rejeitaSolicitacao(SolicitacaoBean solicitacao)
			throws Exception {
		try {
			conn = GerenciadorConexao.getConexao();
			for (int i = 0; i < solicitacao.getItensSolicitacao().size(); i++) {
				query = SQLConfiguracao.getInstance().getValor(
						"rejeita_solicitacao");
				ps = conn.prepareStatement(query);
				ps.setString(1, solicitacao.getFilial());
				ps.setString(2, solicitacao.getNumSolicitacao());
				ps.setString(3, solicitacao.getItensSolicitacao().get(i)
						.getItemPosicao());
				ps.execute();
				conn.commit();
			}
		} catch (Exception e) {
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}
	}

	public void insereHistorico(SolicitacaoBean solicitacao, String descricao)
			throws Exception {
		try {
			long maxCod = 0;
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance().getValor(
					"localiza_max_hist_solicita");
			ps = conn.prepareStatement(query);
			rs = ps.executeQuery();
			if (rs.next()) {
				maxCod = rs.getLong("MAXCOD");
			}
			query = SQLConfiguracao.getInstance().getValor(
					"insere_historico_solicitacao");
			for (int i = 0; i < solicitacao.getItensSolicitacao().size(); i++) {
				ps = conn.prepareStatement(query);
				ps.setLong(1, maxCod);
				ps.setTimestamp(2, new Timestamp(new Date().getTime()));
				ps.setString(3, descricao);
				ps.setLong(4,
						Long.parseLong(solicitacao.getComprador().getCodigo()));
				ps.setString(5, solicitacao.getFilial());
				ps.setString(6, solicitacao.getNumSolicitacao());
				ps.setString(7, solicitacao.getItensSolicitacao().get(i)
						.getItemPosicao());
				ps.setString(8, solicitacao.getItensSolicitacao().get(i)
						.getObservacao());
				ps.execute();
				conn.commit();
				maxCod++;
			}

		} catch (Exception e) {
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}
	}

	@Override
	public void trocaComprador(SolicitacaoBean solicitacao, String comprador)
			throws Exception {
		try {
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance().getValor(
					"troca_comprador_solicita");
			ps = conn.prepareStatement(query);
			ps.setString(1, comprador);
			ps.setString(2, solicitacao.getFilial());
			ps.setString(3, solicitacao.getNumSolicitacao());
			ps.setString(4, solicitacao.getItem());
			ps.execute();
			conn.commit();
		} catch (Exception e) {
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}

	}

	@Override
	public String procuraPorParam(String tabela, String campo, String valor,
			EnumCondicao condicao) {
		return null;
	}

	@Override
	public P salvar(P p) {
		return null;
	}

	public void preSalvar(P p) {
	};

}
